import pandas as pd

df = pd.read_csv("filing_rate_2/old_data.csv")

# 去除所有缺失值
df = df.dropna()


# 时间戳数据处理
def simple_time_features(df):
    """只提取最核心的时间特征"""

    # 1. 计算关键时间间隔（天）
    if all(col in df.columns for col in ["zx_time", "add_time", "tj_time", "lbh_time"]):
        # 初始化时间间隔列为0
        df["zx_to_tj_days"] = 0.0
        df["add_to_tj_days"] = 0.0
        df["tj_to_lbh_days"] = 0.0

        # 被告执行→提交时间间隔：只有zx_time和tj_time都>0时才计算
        zx_tj_mask = (df["zx_time"] > 0) & (df["tj_time"] > 0)
        df.loc[zx_tj_mask, "zx_to_tj_days"] = (
            df.loc[zx_tj_mask, "tj_time"] - df.loc[zx_tj_mask, "zx_time"]
        ) / (24 * 3600)

        # 添加→提交时间间隔：只有add_time和tj_time都>0时才计算
        add_tj_mask = (df["add_time"] > 0) & (df["tj_time"] > 0)
        df.loc[add_tj_mask, "add_to_tj_days"] = (
            df.loc[add_tj_mask, "tj_time"] - df.loc[add_tj_mask, "add_time"]
        ) / (24 * 3600)

        # 提交→立案时间间隔：只有tj_time和lbh_time都>0时才计算
        tj_lbh_mask = (df["tj_time"] > 0) & (df["lbh_time"] > 0)
        df.loc[tj_lbh_mask, "tj_to_lbh_days"] = (
            df.loc[tj_lbh_mask, "lbh_time"] - df.loc[tj_lbh_mask, "tj_time"]
        ) / (24 * 3600)

        # 处理异常值（负值设为0）
        df["zx_to_tj_days"] = df["zx_to_tj_days"].apply(lambda x: max(0, x))
        df["add_to_tj_days"] = df["add_to_tj_days"].apply(lambda x: max(0, x))
        df["tj_to_lbh_days"] = df["tj_to_lbh_days"].apply(lambda x: max(0, x))

    return df


# 应用简化时间特征
df = simple_time_features(df)

# 删除原始时间戳列
df = df.drop(columns=["zx_time", "add_time", "tj_time", "lbh_time"], errors="ignore")

# 删除 id、cid、y_time、create_time、update_time 列
df = df.drop(
    columns=[
        "id",
        "cid",
        "y_time",
        "create_time",
        "update_time",
    ]
)


y_state_mapping = {
    "0": 0,
    "已签收": 1,
    "已取消": 2,
    "作废件": 3,
    "异常件": 4,
    "转寄件": 5,
    "待揽收": 6,
    "派送中": 7,
    "退回签收": 8,
}
df["y_state"] = df["y_state"].map(y_state_mapping)

field_standard_mapping = {
    "追偿权纠纷": 1,
    "借款合同纠纷": 2,
    "保证保险合同纠纷": 3,
}
df["field_standard"] = df["field_standard"].map(field_standard_mapping)

# 将 med_time 列中的非0值替换为1
df["med_time"] = df["med_time"].apply(lambda x: 1 if x != 0 else 0)

# 确保每一列都是数值类型
# for col in df.columns:
#     df[col] = pd.to_numeric(df[col], errors="coerce")

# 打乱数据集中行顺序
# df = df.sample(frac=1, random_state=42).reset_index(drop=True)

"""===================================================================================="""


# 保存处理后的数据集
df.to_csv("filing_rate_2/data.csv", index=False)
new_df = pd.read_csv("filing_rate_2/data.csv")

# 判断每列中的数据是否是数值类型
print(new_df.dtypes)

print(new_df.shape)
print(new_df.head(5))

# 计算 result 列为1的数量
print("result 列为1的数量:", (new_df["result"] == 1).sum())
# 计算 result 列为0的数量
print("result 列为0的数量:", (new_df["result"] == 0).sum())

# y_state 列有几种取值
print(new_df["y_state"].unique(), len(new_df["y_state"].unique()))
# court 列有几种取值
print(new_df["court"].unique(), len(new_df["court"].unique()))
# area 列有几种取值
print(new_df["area"].unique(), len(new_df["area"].unique()))
# court 列的值有多少个0
print((new_df["court"] == 0).sum())
# area 列的值有多少个0
print((new_df["area"] == 0).sum())

# 打印列名
print(new_df.columns)
